package com.copractice.bl;

import com.copractice.data.dao.answer.AnswerDAO;
import com.copractice.data.dao.feedback.FeedbackAnswerDAO;
import com.copractice.data.dao.feedback.UsersFeedbackDAO;
import com.copractice.data.dao.hibernate.answer.HibernateAnswerDAO;
import com.copractice.data.dao.hibernate.feedback.HibernateFeedbackAnswerDAO;
import com.copractice.data.dao.hibernate.feedback.HibernateUsersFeedbackDAO;
import com.copractice.data.dao.hibernate.knowledge.HibernateUsersKnowledgeDAO;
import com.copractice.data.dao.hibernate.performance.HibernateUsersPerformanceDAO;
import com.copractice.data.dao.hibernate.performance.HibernateUsersQuestionsAttemptsDAO;
import com.copractice.data.dao.hibernate.question.HibernateQuestionDAO;
import com.copractice.data.dao.hibernate.tag.HibernateTagDAO;
import com.copractice.data.dao.hibernate.user.HibernateUserDAO;
import com.copractice.data.dao.knowledge.UsersKnowledgeDAO;
import com.copractice.data.dao.performance.UsersPerformanceDAO;
import com.copractice.data.dao.performance.UsersQuestionsAttemptsDAO;
import com.copractice.data.dao.question.QuestionDAO;
import com.copractice.data.dao.tag.TagDAO;
import com.copractice.data.dao.user.UserDAO;
import com.copractice.intel.IntelQuestion;
import com.copractice.intel.IntelQuestionImpl;
import com.google.inject.AbstractModule;

/**
 * Contains binding configuration of business logic module.
 * 
 * @author Dmitry Churbanov (dmitry.churbanov@gmail.com)
 * @version 1.0 01/04/2010
 */
public class BLModule extends AbstractModule {
    
    @Override 
    protected void configure() {
        //dao classes binding
        bind(AnswerDAO.class).to(HibernateAnswerDAO.class);
        bind(FeedbackAnswerDAO.class).to(HibernateFeedbackAnswerDAO.class);
        bind(UsersFeedbackDAO.class).to(HibernateUsersFeedbackDAO.class);
        bind(UsersKnowledgeDAO.class).to(HibernateUsersKnowledgeDAO.class);
        bind(UsersPerformanceDAO.class).to(HibernateUsersPerformanceDAO.class);
        bind(UsersQuestionsAttemptsDAO.class).to(HibernateUsersQuestionsAttemptsDAO.class);
        bind(QuestionDAO.class).to(HibernateQuestionDAO.class);
        bind(TagDAO.class).to(HibernateTagDAO.class);
        bind(UserDAO.class).to(HibernateUserDAO.class);
        
        //intelligent classes binding
        bind(IntelQuestion.class).to(IntelQuestionImpl.class);
    }

}
